Changelog
-------------------------
[2014-12-23]
* WatchJS.noMore does not work as expected with Object.observe. This can be replace with suspend() and resume() methods. E.g. WatchJS.suspend(obj,"attr1")

[2014-12-16]
* Watch function now returns correct values for arrays
* Added WatchJS.onChange() :
    // Track changes made to an array, object or an object's property 
    // and invoke callback with a single change object containing type, value, oldvalue and array splices
    // Syntax: 
    //       WatchJS.onChange(obj, callback, recursive, addNRemove)
    //       WatchJS.onChange(obj, prop, callback, recursive, addNRemove)

[2014-12-09]
* Added dirty-checking fallback for legacy browsers - still needs more testing but it's working in IE8
* Added WatchJS.useDirtyCheck - when set to true use only dirty checking to track changes
* Coalesce changes when using defineProperty or __defineSetter__

[2014-12-08]
* Prevent watchers from being called multiple times. (checked into github) -- issue #80


